﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Invini.System.Enums
{
    [Flags]
    public enum RawInputDeviceFlags : uint
    {
        /// <summary>
        /// No flags, the default.
        /// </summary>
        NONE = 0x0,

        /// <summary>
        /// Microsoft Windows XP Service Pack 1 (SP1): If set, the 
        /// application command keys are handled. RIDEV_APPKEYS can be 
        /// specified only if RIDEV_NOLEGACY is specified for a keyboard 
        /// device.
        /// </summary>
        APPKEYS = 0x400,

        /// <summary>
        /// If set, the mouse button click does not activate the other
        /// window.
        /// </summary>
        CAPTUREMOUSE = 0x200,

        /// <summary>
        /// If set, this enables the caller to receive WM_INPUT_DEVICE_CHANGE notifications for device arrival and device removal.
        /// Windows XP:  This flag is not supported until Windows Vista
        /// </summary>
        DEVNOTIFY = 0x2000,

        /// <summary>
        /// If set, this specifies the top level collections to exclude when
        /// reading a complete usage page. This flag only affects a TLC 
        /// whose usage page is already specified with RIDEV_PAGEONLY.
        /// </summary>
        EXCLUDE = 0x10,

        /// <summary>
        /// Windows Vista or later: If set, this enables the caller to 
        /// receive input in the background only if the foreground 
        /// application does not process it. In other words, if the 
        /// foreground application is not registered for raw input, then 
        /// the background application that is registered will receive the 
        /// input.
        /// </summary>
        EXINPUTSINK = 0x1000,

        /// <summary>
        /// If set, this enables the caller to receive the input even when 
        /// the caller is not in the foreground. Note that hwndTarget 
        /// must be specified.
        /// </summary>
        INPUTSINK = 0x100,

        /// <summary>
        /// If set, the application-defined keyboard device hotkeys are not 
        /// handled. However, the system hotkeys; for example, ALT+TAB and 
        /// CTRL+ALT+DEL, are still handled. By default, all keyboard 
        /// hotkeys are handled. RIDEV_NOHOTKEYS can be specified even if 
        /// RIDEV_NOLEGACY is not specified and hwndTarget is NULL.
        /// </summary>
        NOHOTKEYS = 0x200,

        /// <summary>
        /// If set, this prevents any devices specified by usUsagePage or 
        /// usUsage from generating legacy messages. This is only for the 
        /// mouse and keyboard. If RIDEV_NOLEGACY is set for a mouse or a
        /// keyboard, the system does not generate any legacy message for 
        /// that device for the application. For example, if the mouse TLC 
        /// is set with RIDEV_NOLEGACY, WM_LBUTTONDOWN and related legacy
        /// mouse messages are not generated. Likewise, if the keyboard 
        /// TLC is set with RIDEV_NOLEGACY, WM_KEYDOWN and related legacy 
        /// keyboard messages are not generated.
        /// </summary>
        NOLEGACY = 0x30,

        /// <summary>
        /// If set, this specifies all devices whose top level collection 
        /// is from the specified usUsagePage. Note that usUsage must be zero. 
        /// To exclude a particular top level collection, use RIDEV_EXCLUDE.
        /// </summary>
        PAGEONLY = 0x20,

        /// <summary>
        /// If set, this removes the top level collection from the inclusion 
        /// list. This tells the operating system to stop reading from a 
        /// device which matches the top level collection.
        /// </summary>
        REMOVE = 0x1
    }
}
